home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / TEMP / GNU / bison / TokenValue < prev    next >
Text File  |  1995-06-28  |  1KB  |  48 lines

  1. Token Values
  2. Previous: <Calling Convention=>CallingCon> * Next: <Token Positions=>TokenPosit> * Up: <Lexical=>Lexical>
  3.  
  4. #Wrap on
  5. {fH4}Semantic Values of Tokens{f}
  6.  
  7. In an ordinary (nonreentrant) parser, the semantic value of the token must
  8. be stored into the global variable {fCode}yylval{f}.  When you are using
  9. just one data type for semantic values, {fCode}yylval{f} has that type.
  10. Thus, if the type is {fCode}int{f} (the default), you might write this in
  11. {fCode}yylex{f}:
  12.  
  13. #Wrap off
  14. #fCode
  15.   …
  16.   yylval = value;  \/\* Put value onto Bison stack. \*\/
  17.   return INT;      \/\* Return the type of the token. \*\/
  18.   …
  19. #f
  20. #Wrap on
  21.  
  22. When you are using multiple data types, {fCode}yylval{f}'s type is a union
  23. made from the {fCode}%union{f} declaration (\*Note <Union Decl=>UnionDecl>: The Collection of Value Types).  So when
  24. you store a token's value, you must use the proper member of the union.
  25. If the {fCode}%union{f} declaration looks like this:
  26.  
  27. #Wrap off
  28. #fCode
  29. %union \{
  30.   int intval;
  31.   double val;
  32.   symrec \*tptr;
  33. \}
  34. #f
  35. #Wrap on
  36.  
  37. then the code in {fCode}yylex{f} might look like this:
  38.  
  39. #Wrap off
  40. #fCode
  41.   …
  42.   yylval.intval = value; \/\* Put value onto Bison stack. \*\/
  43.   return INT;          \/\* Return the type of the token. \*\/
  44.   …
  45. #f
  46. #Wrap on
  47.  
  48.